package day02;

/**
 * 异或运算符交换两个数
 * 
 * @author wangbiao
 * 
 */
public class Operator {
	public static void main(String[] args) {
		System.out.println(Integer.toBinaryString(0X3C));
		System.out.println(getBinarySystem(0X7fffffff));
		System.out.println(7&6);
		int[] arr = {1,2,3,4,};
		System.out.println(arr.length);
	}

	/**
	 * 异或方法交换两个数
	 */
	public void swap(int n, int m) {
		// 第一种
		n = n ^ m;
		m = n ^ m;
		n = n ^ m;
		System.out.println("n= " + n + "m= " + m);

		// 第二种求和方法:缺点容易损失精度
		n = n + m;
		m = n - m;
		n = n - m;
		System.out.println("n= " + n + "m= " + m);
	}

	/**
	 * 思路：两个数先与得到两个数的相同的部分，然后两个数与得到两个数不相同的部分除以2， 两个得数的和就是平均数
	 * 
	 * @param n
	 * @param m
	 * @return
	 */
	public int getAverageNumber(int n, int m) {
		return (n & m) + ((n ^ m) >> 1);
	}

	
	/**
	 * 求一个数的二进制的1的个数
	 * @param n
	 * @return
	 */
	public static int getBinarySystem(int n) {
		int count = 0;
		do {
			count++;
		} while ((n=(n & (n-1)))!=0);
		return count;
	}

}
